import router from "@/router";
import store from "@/store";
import storage from "./storage";
// 引入进度条
import nprogress from "nprogress";
import 'nprogress/nprogress.css';
// 判断本地是否有token，如果有，就放行
router.beforeEach((to, from, next) => {
    nprogress.start()
    let token = storage.get('qf-token')
    // to目标路由对线
    // from原路由对线
    // next是个函数，调用之后，可以理解为放行
    // console.log(to);
    if (token) {
        // 要判断是否有用户菜单
        if (!store.state.permission.userMenu.length) {
            // 发起请求，获取权限菜单
            store.dispatch('permission/FETCH_MENU_LIST')
                .then(() => {
                    //这里要注意, next里面要传参数即要进入的页面的路由信息，因为next传参数后，当前要进入的路由会被废止，转而进入参数对应的路由，虽然是同一个路由，这么做主要是为了确保addRoutes生效了,并且不产生历史记录
                    next({path:to.path,replace:true,query:to.query})
                })
        } else {
            next()
        }

    } else {
        // 没有token
        // 1、访问的是登入页
        if (to.path === '/login') {
            next()
        } else {
            // 2、访问的不是登入页，强行调回登入页   
            next({ path: "/login" })
        }
    }
})


// 全局后置钩子，进入了路由组件之后才回调
router.afterEach( (to,from) => {
  nprogress.done()
//   to里面有个属性叫做matched 这里能够获取到匹配成功的路由对象
//   因为第0项匹配的是空字符串路径，我们不需要，所以要进行处理
let matched = to.matched.filter((item,index) => index > 0)
store.commit('permission/SET_CRUMB',matched)

    
})
export default router